#ifndef RESPONSE_HORIZONTAL_FLIP_IMAGE_H_INCLUDED
#define RESPONSE_HORIZONTAL_FLIP_IMAGE_H_INCLUDED

/**
* @file response_horizontal_flip_image.h
*
*	 Nel file response_horizontal_flip_image.h viene definita la classe che gestisce la 
*	 comunicazione tra il Service Provider che offre il servizio di Horizontal_Flip_Image
*	 ed il Client
*	
* @author Favale Angelo
* @author Fagioli Alessio
*
* @version 1.0
*/

#include "libreria.h"
/**
* @class Response_Horizontal_Flip_Image
*
*	 La classe Response_Horizontal_Flip_Image gestisce la comunicazione tra il Service
*	 Provider ed il client che vuole richiedere il servizio di Horizontal_Flip_Image
*/
class Response_Horizontal_Flip_Image
{
	private:
		char name[BUFFER_SIZE];	/**< Nome del Servizio (Horizontal_Flip_Image)	*/
		host entita;		/**< Mantiene informazioni sull'entità con cui
					*    deve scambiare informazioni	        */
	public:
		/**
		* Il costrutture carica le informazioni riguardanti l'entità con cui deve 
		* comunicare
		*/
		Response_Horizontal_Flip_Image(host);

		/**
		* @param file Nome dell'immagine da specchiare
		*
		* @return true se l'invio della richiesta al Service Provider è andata a buon
		*	  fine, false altrimenti
		*
		* Questo metodo permette al client di chiedere al Service Provider di
		* specchiare l'immagine file
		*/
		bool code_request(char * file);

		/**
		* @param buf Messaggio da decodificare
		* @param file Nome dell'immagine che il client vuole specchiare, ritornato
		*	      per riferimento
		* @param lunghezza_file Dimensione dell'immagine che il client vuole 
		*			specchiare, ritornato per riferimento
		*
		* @return true se la decodifica del messaggio è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di decodificare il messaggio 
		* inviato dal client.
		* In particolare vengono estratte le informazioni sul nome dell'immagine e
		* sulla sua dimensione
		*/
		bool decode_request( char * buf, char * file, char * lunghezza_file );

		/**
		* @param nome_file Nome dell'immagine che il client vuole specchiare
		* @param len_file Dimensione dell'immagine che il client vuole specchiare
		*
		* @return true se la ricezione dell'immagine è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di ricevere l'immagine che il
		* client vuole specchiare
		*/
		bool receive_image( char * nome_file, int len_file );

		/**
		* @param file Nome dell'immagine che il Service Provider invia al client
		*
		* @return true se l'invio dell'immagine specchiata è andata a buon fine,
		*	  false altrimenti
		*
		* Questo metodo permette al Service Provider di inviare l'immagine specchiata
		* al client
		*/
		bool send_image(char * file);

		/**
		* @param verify Indica se l'operazione di specchiatura dell'immagine è
		*		andata a buon fine
		* @param nome_file Nome dell'immagine che il Service Provider ha specchiato
		*
		* @return true se l'invio dell'immagine specchiata è avvenuto con successo,
		*	  false altrimenti
		*
		* Questo metodo consente al Service Provider di inviare l'immagine specchiata
		* al client che l'ha richiesta
		*/
		bool code_response( bool verify, char * nome_file );

		/**
		* @param lunghezza_file Dimensione dell'immagine specchiata
		*
		* @return true se l'immagine specchiata è stata ricevuta con successo, false
		*	  altrimenti
		*
		* Questo metodo permette al client di ricevere l'immagine specchiata dal
		* Service Provider
		*/
		bool decode_response(char * lunghezza_file);	
} ;
#endif
